[数据平台]05 数据平台之权限-Ranger 五

Posted by 李玉坤 on 2018-04-22

Apache Ranger简介

Apache Ranger提供一个集中式安全管理框架, 并解决授权和审计。它可以对Hadoop生态的组件如HDFS、Yarn、Hive、Hbase等进行细粒度的数据访问控制。通过操作Ranger控制台,管理员可以轻松的通过配置策略来控制用户访问权限。

  • 丰富的组件支持(HDFS,HBASE, HIVE, YARN, KAFKA,STORM)
  • 提供了细粒度级权限控制( hive列级别)
  • 权限控制插件式,统一方便的策略管理
  • 支持审计日志,记录各种操作的日志,提供统一的查询接口和界面
  • 支持和kerberos的集成
  • 提供了Rest接口供二次开发

为什么选择Ranger

多组件支持,基本覆盖我们现有技术栈的组件

支持审计日志,可以查找到用户操作明细,方便问题排查反馈

拥有自己的用户体系,方便和其他系统集成,提供接口调用

Ranger的基本架构


RangerAdmin

  • 对于各服务策略进行规划,分配相应的资源给相应的用户或组
  • 以RESTFUL形式提供策略的增删改查接口
  • 统一查询和管理页面

Service Plugin

  • 嵌入到各系统执行流程中,定期从RangerAdmin拉取策略
  • 根据策略执行访问决策树
  • 记录访问审计

Ranger的权限模型

用户:由User或Group来表达

资源:不同组件有不同的资源,如HDFS的Path, Hive的DB\TABLE

策略: Service可以有多条Policy,组件不同, Policy授权模型不同

HDFS例子

  • HDFS启动时加载Ranger插件,并从Admin拉取权限策略
  • 用户访问请求到达NameNode,进行权限验证
  • 验证后处理访问请求,并记录审计日志

Hive例子

  • HiveServer2启动时加载Ranger插件,并从Admin拉取权限策略
  • 用户SQL查询请求到达HiveServer2,在Compile阶段进行权限验证
  • 验证后处理访问请求,并记录审计日志

Yarn例子

  • ResourceManger启动时加载Ranger插件,从Admin拉取权限策略
  • 用户提交任务到ResourceManager,在解析任务阶段进行权限验证
  • 验证后提交任务,并记录审计日志

Apache Ranger安装

1、下载 http://ranger.apache.org/download.html
同时也可以在githup上搜索Ranger 下载源码

2、前置环境

  • JDK 运行RangerAdmin RangerKMS
  • RDBMS 1.存储授权策略 2.存储Ranger 用户/组 3.存储审核日志
  • Solr(可选) 存储审核日志
  • HDFS(可选) 存储审核日志
  • Kerberos(可选) 确保所有请求都被认证

3、Apache Ranger安装部署

  1. 下载Apache Ranger源码,进行编译
    大家可以访问Ranger官网下载对应版本的Ranger安装包,本课程使用的是Ranger-1.2.0版本,当前最新版本为2.0.0。
    下载mysql的java驱动包mysql-connector-java

  2. 编译打包
    下载完成之后,解压缩,对源码进行编译打包,生成安装包。

    1
    2
    3
    4
    5
    6
    tar zxvf apache-ranger-1.2.0.tar.gz
    cd apache-ranger-1.2.0
    mvn -DskipTests=true clean compile package install assembly:assembly

    #编译完成后可在target下看到一系列的安装包,
    ls target
  3. 部署到指定位置
    编译完成之后,对安装包进行解压,并且移动到指定安装目录。

    1
    2
    3
    4
    tar zxvf ranger-1.2.0-admin.tar.gz -C ../app
    ln -s ranger-1.2.0-admin ranger
    # 移动mysql驱动包到ranger目录 也可以不移动,下面配置中直接指定路径
    cp mysql-connector-java-5.1.38.jar ../app/ranger/
  4. 配置install.properties,执行安装操作
    Ranger的安装非常简单,我们只需要配置它自带的install.properties文件即可,配置完成之后执行安装命令会自动进行安装,无需其他配置。我们安装的为简单版本的ranger,没有开启其他功能,比如Kerberos、审计日志等等。我们来看一下install.properties需要关注的内容:
    install.properties

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    # 指定Ranger使用的数据库类型,我们这里使用mysql
    DB_FLAVOR=MYSQL
    # 指定数据库driver的path
    SQL_CONNECTOR_JAR=/soft/home/ranger-1.2.0-admin/mysql-connector-java-5.1.22-bin.jar
    # 指定数据库root用户链接信息
    db_root_user=root
    db_root_password=root
    # select user from mysql.user where user='root' and host='localhost'必须可以查询到结果
    db_host=localhost
    # 指定Ranger数据库名称及用户信息
    db_name=ranger
    db_user=root
    db_password=root
    # 设置一下相关秘钥,后续登录会使用到
    #PLEASE NOTE :: Password should be minimum 8 characters with min one alphabet and one numeric.
    # 密码至少8个字符,至少一个字母和一个数字
    rangerAdmin_password=root@123
    rangerTagsync_password=root@123
    rangerUsersync_password=root@123
    keyadmin_password=root@123
    # 审计日志配置成数据库
    audit_store=db
    audit_db_user=root
    audit_db_name=ranger
    audit_db_password=root
    # 策略管理使用默认配置即可
    policymgr_external_url=http://localhost:6080
    policymgr_http_enabled=true
    policymgr_https_keystore_file=
    policymgr_https_keystore_keyalias=rangeradmin
    policymgr_https_keystore_password=
    # unix用户及用户组使用默认配置即可
    unix_user=ranger
    unix_user_pwd=ranger
    unix_group=ranger

    使用root来执行setup命令
    配置完成之后,执行./setup.sh进行安装。

  5. 启动服务
    我们启动Ranger-Admin服务,启动完成之后可以通过界面进行登录访问。

    1
    2
    3
    4
    5
    6
    7
    ranger-admin start

    #查看服务是否启动
    jps -m

    18472 Jps -m
    18394 EmbeddedServer
  6. 验证服务状态
    我们访问http://ranger_host:6080端口,可以看到我们ranger的登录界面,登录的用户名密码为admin/root@123(我们前面配置文件中配置的密码)。

Ranger-HDFS-Plugin安装

  1. 解压缩安装包,并移动到指定目录
    1
    2
    tar zxvf ranger-1.2.0-hdfs-plugin.tar.gz -C ../app/
    ln -s ranger-1.2.0-hdfs-plugin ranger-hdfs
  2. 配置install.properties
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # Ranger Admin地址
    POLICY_MGR_URL=http://localhost:6080
    # 服务名词 很重要,后面在ranger-admin添加时需要保持一致
    REPOSITORY_NAME=kun_hdfs
    # 安装目录,指定hadoop home
    COMPONENT_INSTALL_DIR_NAME=/home/hadoop/app/hadoop
    # 用户和用户组,我的环境默认使用hadoop用户启动相关服务
    CUSTOM_USER=hadoop
    CUSTOM_GROUP=hadoop
    #其他功能不开启,保持默认即可 hdfs默认端口是8020,如果更改需要做相应的
    端口调整
  3. 执行安装命令
    1
    2
    3
    root用户执行

    ./enable-hdfs-plugin.sh
  4. 重启一下hdfs集群
  5. Ranger-Admin界面添加Services
    登录Ranger Admin,添加HDFS Service


6. 验证

1
2
3
4
5
6
[root@hadoop001 ~]# hdfs dfs -put anaconda-ks.cfg /my_test
[root@hadoop001 ~]# sudo su - hadoop
[hadoop@hadoop001 ~]$ vim ~/.bash_profile
[hadoop@hadoop001 ~]$ source ~/.bash_profile
[hadoop@hadoop001 ~]$ hdfs dfs -rm /my_test/anaconda-ks.cfg
rm: Permission denied: user=hadoop, access=WRITE, inode="/my_test":root:supergroup:drwxr-xr-x

Ranger-Hive-Plugin安装

  1. 解压缩安装包,并移动到指定目录

    1
    2
    tar zxvf ranger-1.2.0-hive-plugin.tar.gz
    mv ranger-1.2.0-hive-plugin /soft/
  2. 配置install.properties

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # Ranger Admin地址
    POLICY_MGR_URL=http://localhost:6080
    # 服务名词 很重要,后面在ranger-admin添加时需要保持一致
    REPOSITORY_NAME=kun_hive
    # 安装目录,指定hive home
    COMPONENT_INSTALL_DIR_NAME=/root/app/hive
    # 用户和用户组,我的环境默认使用hadoop用户启动相关服务
    CUSTOM_USER=hadoop
    CUSTOM_GROUP=hadoop
    #其他功能不开启,保持默认即可
    执行安装命令
    ./enable-hive-plugin.sh
  3. 重启hiveserver2

    1
    hive --service hiveserver2 &
  4. Ranger-Admin界面添加Services

  5. 验证
    利用hadoop用户来登录查询发现无权限